import WPopView from './popView'

/**
 * 错误处理方法
 * @param err 错误信息
 * @param func 没有错误回调
 */
export const w_error_pop = function(err, func = () => {}) {

  if (err && err.msg) {
    WPopView.msgError (err.msg)
    return
  } else if (err) {
    console.log('w_error_pop err = ', err)
  } else {
    func()
  }
  WPopView.hideLoading()
}

/**
 * 表单校验空值
 * @param model 要校验的模型
 * @param checks 校验的数组 { key: 娇艳的字段对象, msg: 错误信息, type: exis(默认校验是否存在)  }
 * @param func 正确回调
 */
export const w_check_form = function(model, checks, func = () => {}) {
  for (let i = 0; i < checks.length; i += 1) {
    const item = checks[i]
    switch (item.type) {
      default :
        if (!model[item.key]) {
          WPopView.msgError (item.msg)
          return
        }
    }
  }
  func()
}

/**
 * 删除操作封装
 * @param <Promiss> eleteFunc  删除的异步操作
 * @param tip 删除提示
 * @param dustbin 是否添加到回收站
 */
export const w_remove_pop = async function(eleteFunc, tip = '', dustbin = false) {
  return new Promise((resolve, reject) => {
    const tipStr = dustbin ? `确定要${tip ? '将' : ''}${tip}添加到回收站嘛？` : `确定要删除${tip}吗？`
    WPopView.confirm('删除提示', tipStr).then(() => {
      eleteFunc().w_then(() => {
        WPopView.msgSuccess(dustbin ? '已经添加到回收站!' : '删除成功!')
        resolve()
      }, (err) => {
        reject(err)
      })
    }).catch((err) => {
      reject(err)
    })
  })
}

/**
 * 加载中提示
 * @param asyncOperations
 *          loadingText: 加载中文字
 *          successText: 加载成功文字（如果写就会提示）
 *          errorText: 加载失败提示（如果写就会提示）
 * @param option
 * @returns {Promise<any>}
 */
export const w_indicator = function(asyncOperations, option = {}) {
  return new Promise((resolve, reject) => {
    const loadingText = option.loadingText || '添加中...'
    const successText = option.successText
    const errorText = option.errorText

    WPopView.showLoading(loadingText)
    asyncOperations.then (() => {
      if (successText) {
        WPopView.msgSuccess (successText, {
          onClose() {
            resolve()
          }
        })
      } else {
        resolve()
      }
    }).catch (() => {
      if (errorText) {
        WPopView.msgError (errorText,{
          onClose: () => {
            reject()
          }
        })
      } else {
        reject()
      }
    })
  })
}

// options
const install = function (Vue) {

  // 1. 添加全局方法或属性
  Vue.myGlobalMethod = function () {
    // 逻辑...
  }

  // 2. 添加全局资源
  // Vue.directive('my-directive', {
  //   bind (el, binding, vnode, oldVnode) {
  //     // 逻辑...
  //   }
  // })

  // 3. 注入组件
  // Vue.mixin({
  //   created: function () {
  //     // 逻辑...
  //   }
  // })


  Vue.prototype.$w_error_pop = w_error_pop
  Vue.prototype.$w_check_form = w_check_form
  Vue.prototype.$w_remove_pop = w_remove_pop
  Vue.prototype.$w_indicator = w_indicator
  Vue.prototype.$w_popview = WPopView
}

export default {
  install
}
